package org.personal.jdbc;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.jsp.jstl.sql.Result;
import javax.servlet.jsp.jstl.sql.ResultSupport;

public class Statement{
	
	private Connection connection=null;
	
	/** 构造方法
	 * @param connection
	 */
	public Statement(Connection connection){
		this.connection=connection;
	}
	
	/** 执行 UPDATE 和 DELETE SQL语句，返回影响行数
	 * @param sql SQL语句
	 * @return 影响行数
	 */
	public int update(String sql) {
		int result=0;
		Connection con=null;
		java.sql.Statement stat=null;
		try {
			con=getConnection();
			stat=con.createStatement();
			result=stat.executeUpdate(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			try {
				if(stat!=null)stat.close();
				if(con!=null)con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return result;
	}


	/** 执行SQL查询语句,返回第一行第一列的结果对象
	 * @param sql SQL语句
	 * @return 结果对象
	 */
	public Object query(String sql) {
		Object result=null;
		Connection con=null;
		java.sql.Statement stat=null;
		ResultSet rs=null;
		try {
			con = getConnection();
			stat=con.createStatement();
			rs=stat.executeQuery(sql);
			if(rs.next()){
				result=rs.getObject(1);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			try {
				if(rs!=null)rs.close();
				if(stat!=null)stat.close();
				if(con!=null)con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return result;
	}
	
	/** 执行SQL语句,获得javax.servlet.jsp.jstl.sql.Result结果集对象
	 * @param sql SQL语句
	 * @return javax.servlet.jsp.jstl.sql.Result结果集对象
	 */
	public Result getResult(String sql) {
		Connection con=null;
		java.sql.Statement stat=null;
		ResultSet rs=null;
		Result r=null;
		try {
			con = getConnection();
			stat=con.createStatement();
			rs=stat.executeQuery(sql);
			r=ResultSupport.toResult(rs);
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			try {
				if(rs!=null)rs.close();
				if(stat!=null)stat.close();
				if(con!=null)con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return r;
	}

	public Connection getConnection() {
		return this.connection;
	}

	public void setConnection(Connection connection) {
		this.connection = connection;
	}

}
